from torch.utils.data import Dataset

class StreamDataset(Dataset):

    def evalThroughput(self) -> bool:
        # 2. 参照数据采集设备、模型训练设备的内外存交换速率定义吞吐量，要求满足与多线程文件存取同量级的水平
        return NotImplementedError()

    def evalDistributionShift(self) -> bool:
        # 3. 数据存在随时间变化的分布漂移；
        return NotImplementedError()
    
    def evalNewClass(self) -> bool:
        # 4. 数据存在随时间变化的类别新增
        return NotImplementedError()
    
    def evalObjectiveChange(self) -> bool:
        # 5. 数据存在随时间变化的目标变化
        return NotImplementedError()
    
    def evalTimeliness(self) -> bool:
        # 6. 对在线决策类应用要求数据生成环境状态改变时延低于反馈时延
        return NotImplementedError()

    def evalStreamData(self) -> bool:
        if not (self.evalDistributionShift() or self.evalNewClass() or self.evalObjectiveChange()):
            # 数据随时间推移，快速积聚，由吞吐量定义数据大小，同时可存在{3}{4}{5}所定义的特定情况；（+）
            # 3, 4, 5至少满足一项
            return False
        count = int(self.evalDistributionShift()) \
            + int(self.evalNewClass()) \
            + int(self.evalObjectiveChange()) \
            + int(self.evalTimeliness()) \
            + int(self.evalThroughput())
        
        # 以上规则满足至少3条定义为流数据，可以用于算法验证与测评。(+)表示必须的满足条件。
        if count >= 3:
            return True
        else:
            return False
        